草庐IT

Java CMS GC 行为

全部标签

c++ - 是否尝试修改 const_cast-ed,但动态分配的常量对象仍然是未定义的行为?

这个问题在这里已经有了答案:Canaheap-allocatedobjectbeconstinC++?(6个答案)关闭7年前。例如:constint*pc=newconstint(3);//notetheconstint*p=const_cast(pc);*p=4;//undefinedbehavior?特别是,编译器能否优化掉分配给堆的*pc?如果不是,尝试通过p修改*pc是否仍然构成未定义的行为-如果是,为什么?

c++ - 自 1.55 以来 boost::bind/boost::function 的奇怪行为变化

我正在尝试编译aproject这是针对Boost1.55和较新的Boost1.63编写的,我遇到了一个与bind/function相关的非常奇怪的错误。这是完整的、简化的测试用例:#include#includetemplateclassfoo{public:usingfunction_t=boost::function3;voidset_function(function_tf){func_=f;}private:function_tfunc_;};classbar{public:bar(){foo_.set_function(boost::bind(&bar::func,this,

c++ - 从它之后声明的另一个成员数据初始化一个成员数据是未定义的行为吗?

如果我的类声明了两个成员数据x_和y_以便从y_初始化x_>和y_有一个值那么x_有一个Undefinedvalue吗?或者是什么?classEmpl{public:intx_{y_};inty_{10};};intmain(){Emple{};std::cout我在MSVC++2105上尝试了该示例并得到:0和10而在GCC上我得到了10和10!那么这样做是不是未定义的行为? 最佳答案 Soasaresultisitundefinedbehaviortodoso?是的。读取不确定值的行为是未定义的。在本例中,y_的值用于初始化x_

c++ - MS VC++ 上直接和复制初始化的不同行为(使用用户定义的转换运算符)

以下代码compilesfine同时使用g++9.1和clang8.0.0(编译标志为-std=c++17-Wall-Wextra-Werror-pedantic-errors),但不适用于MSVC19.22(编译标志为/std:c++17/permissive-):structX{};structBar{Bar()=default;Bar(X){}};structFoo{operatorX()const{returnX{};}operatorBar()const{returnBar{};}};intmain(){Foofoo;[[maybe_unused]]Barb1=foo;//O

c++ - 为什么在将 std::vector 与默认构造函数一起使用时会出现异常行为?

总结我最近看到了一些关于std::vector的问题,出于好奇,我一直在研究它们。我从来没有真正使用过STL,但我知道你可以使用vector来处理对象数组的分配,而且我可以发誓有一种方法可以使用默认构造函数在vector是创建。的确,这个问题Initializingastd::vectorwithdefaultconstructor处理使用复制构造函数和默认值与仅使用默认构造函数初始化vector。但是,由于我一直在VisualStudio2010中使用C++控制台应用程序项目进行一些试验,因此我没有得到与此解释一致的结果。根据对上述问题(givenhere)的回答中的评论之一,如果您

c++ - 可以在全局对象构造函数中进行打印/记录还是未定义的行为?

#includestructA{A(){std::cout根据C++标准,驻留在多个文件中的全局对象初始化顺序是未指定的。即在1个文件中定义的全局对象将按从上到下的顺序调用它们的构造函数。但是,如果有多个这样的文件,那么哪个文件将是倒数第一个,是实现定义的还是未指定的。现在,std::cout和my_a都是全局对象。这意味着上面的代码是一个UB,它是否正确(即初始化失败)?编译器可能足够聪明,可以在移动到其他对象之前先初始化std对象。仍然为了清楚起见,是否有任何完整的证明方法可以对跨多个文件的全局对象执行日志记录? 最佳答案 是的

c++ - 在编译时填充 std::array 和 const_cast 可能的未定义行为

已知std::array::operator[]由于C++14是constexpr,请参见下面的声明:constexprconst_referenceoperator[](size_typepos)const;但是,它也是const限定的。如果您想使用std::array的下标运算符以便在编译时为数组赋值,这会产生影响。例如考虑以下用户文字:templatestructFooLiteral{std::arrayarr;constexprFooLiteral():arr{}{for(inti(0);i如果您尝试声明类型为FooLiteral的constexpr变量,上述代码将无法编译。这

C++ 模板 friend 奇怪的行为

我在下面的代码中看到一些我无法解释的东西。在VS6、VS9和GCCT2::foo2()下给出错误:“bar”:无法访问类“C1”中声明的protected成员。但是,如果您删除C1::bar(),它会正确编译和运行,即使T2仍在访问protectedC1B:bar(),您会认为这会是同样的问题。请注意,在T2::foo2()中,您可以将'pT1'转换为'T1*',一切都很好,但这仍然不能解释为什么允许C1B::bar(),但C1::bar()不是。templateclassT2;templateclassT1{//templatefriendclassT2;-->thisdoesn't

c++ - c++11 模式下奇怪的 g++ 预处理器行为

我遇到的问题是,当g++在c++11模式下运行时,一些处理器宏没有正确展开。这让我在使用Qt编译程序时遇到麻烦。$g++--versiong++(GCC)4.7.2Copyright(C)2012FreeSoftwareFoundation,Inc.Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.以下片段暴露了问题:$catfoo.cpp//#include#defineQTOSTRI

c++ - 导致时间旅行的未定义行为

thisarticle的一个例子来自msdn博客让我兴奋不已:它说这个函数:voidunwitting(booldoor_is_open){if(door_is_open){walk_on_in();}else{ring_bell();//waitforthedoortoopenusingthefallbackvaluefallback=value_or_fallback(nullptr);wait_for_door_to_open(fallback);}}可以优化成这个:voidunwitting(booldoor_is_open){walk_on_in();}因为调用value_o